package com.bawei.module_live.ui

import com.bawei.lib_common.entity.ResponseEntity
import com.bawei.module_live.data.*
import okhttp3.ResponseBody
import retrofit2.http.*
import retrofit2.Response

/**
 * 直播间模块 - 网络接口层
 * 
 * 定义了所有与直播间相关的网络请求接口，包括：
 * - 直播列表相关接口
 * - 直播间管理接口
 * - 礼物系统接口
 * - 用户关注接口
 * - 红包系统接口
 * - 商品系统接口
 * 
 * 使用Retrofit注解定义HTTP请求
 */
interface LiveApi {
    
    // ==================== 直播列表相关接口 ====================
    
    /**
     * 获取推荐直播列表
     * @param page 页码，从1开始
     * @param pageSize 每页数量
     * @return 直播列表数据
     */
    @GET("videosimple/getRecommendSimpleVideo")
    suspend fun getLiveList(
        @Query("page") page: Int,
        @Query("pagesize") pageSize: Int
    ): ResponseEntity<List<LiveData>>
    
    /**
     * 获取直播间列表
     * @return 直播间列表数据
     */
    @GET("/liveRoom/getLiveRoom")
    suspend fun getLiveRoomList(): ResponseEntity<List<LiveRoomData>>
    
    // ==================== 直播间管理接口 ====================
    
    /**
     * 进入直播间
     * @param roomId 直播间ID
     * @return 是否成功进入
     */
    @FormUrlEncoded
    @POST("/liveRoom/enterLiveRoom")
    suspend fun enterLiveRoom(
        @Field("roomId") roomId: String
    ): ResponseEntity<Boolean>
    
    /**
     * 退出直播间
     * @param roomId 直播间ID
     * @return 是否成功退出
     */
    @FormUrlEncoded
    @POST("/liveRoom/exitLiveRoom")
    suspend fun exitLiveRoom(
        @Field("roomId") roomId: String
    ): ResponseEntity<Boolean>
    
    /**
     * 获取直播间用户列表
     * @param roomId 直播间ID
     * @return 用户列表数据
     */
    @GET("/liveRoom/getLiveRoomUsers")
    suspend fun getLiveRoomUsers(
        @Query("roomId") roomId: String
    ): ResponseEntity<List<LiveRoomUser>>
    
    // ==================== 礼物系统接口 ====================
    
    /**
     * 获取礼物列表
     * @return 礼物列表数据
     */
    @GET("/gift/getGiftList")
    suspend fun getGiftList(): ResponseEntity<List<GiftData>>
    
    /**
     * 发送礼物
     * @param senderId 发送者ID
     * @param receiverId 接收者ID
     * @param giftId 礼物ID
     * @param count 礼物数量
     * @param roomId 直播间ID
     * @return 是否发送成功
     */
    @FormUrlEncoded
    @POST("/gift/sendGift")
    suspend fun sendGift(
        @Field("senderId") senderId: Int,
        @Field("receiverId") receiverId: Int,
        @Field("giftId") giftId: Int,
        @Field("count") count: Int,
        @Field("roomId") roomId: String
    ): ResponseEntity<Boolean>
    
    /**
     * 发送房间礼物（新版本）
     * @param body 礼物请求体
     * @return 是否发送成功
     */
    @POST("/liveRoom/sendRoomGift")
    suspend fun sendRoomGift(
        @Body body: SendGiftRequest
    ): ResponseEntity<Boolean>
    
    /**
     * 下载SVGA动画文件
     * @param filename 文件名
     * @return 文件字节流
     */
    @GET("/gift/download/{filename}")
    @Streaming
    suspend fun downloadSVGAFile(
        @Path("filename") filename: String
    ): Response<ResponseBody>
    
    // ==================== 用户关注接口 ====================
    
    /**
     * 关注用户
     * @param focuseUserid 关注者ID（当前用户）
     * @param focusedUserid 被关注者ID（主播）
     * @return 是否关注成功
     */
    @FormUrlEncoded
    @POST("/focuse/focuse")
    suspend fun focuseUser(
        @Field("focuseUserid") focuseUserid: Int,
        @Field("focusedUserid") focusedUserid: Int
    ): ResponseEntity<Boolean>
    
    /**
     * 取消关注用户
     * @param focuseUserid 关注者ID（当前用户）
     * @param focusedUserid 被关注者ID（主播）
     * @return 是否取消关注成功
     */
    @DELETE("/focuse/unFocuse")
    suspend fun unFocuseUser(
        @Query("focuseUserid") focuseUserid: Int,
        @Query("focusedUserid") focusedUserid: Int
    ): ResponseEntity<Boolean>
    
    /**
     * 获取用户关注列表
     * @param userId 用户ID
     * @return 关注列表数据
     */
    @GET("/focuse/getFocusedByIdUsingGET")
    suspend fun getFocuseListByUserId(
        @Query("focusID") userId: Int
    ): ResponseEntity<List<UserInfo>>
    
    /**
     * 检查关注状态
     * @param focuseUserid 关注者ID
     * @param focusedUserid 被关注者ID
     * @return 是否已关注
     */
    @GET("/focuse/checkFocuseStatus")
    suspend fun checkFocuseStatus(
        @Query("focuseUserid") focuseUserid: Int,
        @Query("focusedUserid") focusedUserid: Int
    ): ResponseEntity<Boolean>
    
    // ==================== 榜单系统接口 ====================
    
    /**
     * 获取榜单列表
     * @param type 榜单类型（如：人气榜、礼物榜等）
     * @return 榜单列表数据
     */
    @GET("/liveRoom/getOrderHotList")
    suspend fun getOrderHortList(
        @Query("type") type: String
    ): ResponseEntity<List<OrderHotData>>
    
    /**
     * 获取全站榜单
     * @return 全站榜单数据
     */
    @GET("/liveRoom/getOrderHotAll")
    suspend fun getOrderHotAll(): ResponseEntity<List<OrderHotData>>
    
    /**
     * 获取带货榜单
     * @return 带货榜单数据
     */
    @GET("/liveRoom/getOrderHotDaihuo")
    suspend fun getOrderHotDaihuo(): ResponseEntity<List<OrderHotData>>
    
    // ==================== 红包系统接口 ====================
    
    /**
     * 获取红包结果/状态
     * @param body 房间ID请求体
     * @return 红包结果数据
     */
    @POST("/liveRoom/getRedPacketResult")
    suspend fun getRedPacketResult(
        @Body body: RoomIdBody
    ): ResponseEntity<RedPacketResult?>
    
    /**
     * 参与红包抽奖
     * @param body 房间ID请求体
     * @return 是否参与成功
     */
    @POST("/liveRoom/joinRedPacket")
    suspend fun joinRedPacket(
        @Body body: RoomIdBody
    ): ResponseEntity<Boolean>
    
    // ==================== 商品系统接口 ====================
    
    /**
     * 获取直播间商品列表
     * @param roomId 直播间ID
     * @return 商品列表数据
     */
    @FormUrlEncoded
    @POST("/liveRoom/goodsList")
    suspend fun getLiveRoomGoods(
        @Field("roomId") roomId: String
    ): ResponseEntity<LiveShopData>
}